perm filename PIXTS4.SAI[VIS,HPM] blob sn#147478 filedate 1975-02-21 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00002 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	BEGIN "PIXTS4"
C00015 ENDMK
C⊗;
BEGIN "PIXTS4"
REQUIRE "VIXNIC.SAI[VIS,HPM]" SOURCE_FILE;
REQUIRE "WIXNIC.SAI[VIS,HPM]" SOURCE_FILE;
INTEGER SIZE0,SIZE1,SIZE2,SIZE3,SIZE4,W,CAMERA,CHN,WID,HIG,IAV,BIT;
BOOLEAN SYNA,SAME;
STRING LASTI,FN1,CAMN;
REQUIRE "⊂⊃<>" DELIMITERS;
DEFINE BOX(X1,Y1,X2,Y2)=
⊂	IF SYNA THEN
		BEGIN
		LINE(X1,Y1,X2,Y1);
		LINE(X2,Y1,X2,Y2);
		LINE(X2,Y2,X1,Y2);
		LINE(X1,Y2,X1,Y1);
		END
	ELSE
		BEGIN
		DRKEN;
		RECTAN(X1,Y1,X2,Y2);
		LITEN;
		RECTAN((3*(X1)+X2)/4,(3*(Y1)+Y2)/4,(X1+3*(X2))/4,(Y1+3*(Y2))/4);
		END
⊃;

DEFINE BOX1(X1,Y1,X2,Y2)=
⊂	        BEGIN
                LITEN;
		LINE(X1,Y1,X2,Y1);
		LINE(X2,Y1,X2,Y2);
		LINE(X2,Y2,X1,Y2);
		LINE(X1,Y2,X1,Y1);
		END
⊃;



OUTSTR("CAMERA NUMBER:"); CAMERA←CVD(CAMN←INCHWL) MOD 4;
IF LENGTH(CAMN)=0 THEN CAMERA←-1;
OUTSTR("WINDOW SIZE:"); W←CVD(INCHWL);
OUTSTR("USE SYNTHESIZER?"); SYNA←(INCHWL LAND '137)="Y";
OUTSTR("SAME PICTURE?"); SAME←(INCHWL LAND '137)="Y";

IF CAMERA≥0 THEN
   BEGIN
   WID←HIG←256; BIT←4;
   SIZE0←PIXDIM(HIG,WID,BIT);
   OUTSTR("SIZE= "&CVS(SIZE0)&'15&'12);
   END
ELSE
   BEGIN
   OUTSTR("FILE 1:"); FN1←INCHWL;
   SIZE0←PFLDIM(FN1);
      BEGIN
      INTEGER ARRAY T[0:SIZE0-1];
      GETPFL(FN1,T[0]);
      HIG←T[PCLN];
      WID←T[LNBY];
      BIT←T[BYBI];
      END;
   END;
   SIZE1←PIXDIM(HIG%2,WID%2,(BIT+2) MIN 10);
   SIZE2←PIXDIM(HIG%4,WID%4,(BIT+4) MIN 10);
   SIZE3←PIXDIM(HIG%8,WID%8,(BIT+6) MIN 10);
   SIZE4←PIXDIM(HIG%16,WID%16,(BIT+8) MIN 10);

   BEGIN
   INTEGER ARRAY PA0,PB0[0:SIZE0-1],
                 PA1,PB1[0:SIZE1-1],
                 PA2,PB2[0:SIZE2-1],
                 PA3,PB3[0:SIZE3-1],
                 PA4,PB4[0:SIZE4-1];
   INTEGER I,J,K;
   IF CAMERA≥0 THEN
      BEGIN
      MAKPIX(HIG,WID,4,PA0[0]);
      MAKPIX(HIG,WID,4,PB0[0]);
      OUTSTR("READING ");
      CAMPIX(CAMERA,2,2,1,8,PA0[0]);
      IF CAMERA≠0 THEN BEGIN OUTSTR("HO HUM"); INCHWL; END;
      IF ¬SAME THEN CAMPIX(CAMERA,2,2,1,8,PB0[0]) ELSE COPPIC(PA0[0],PB0[0]);
      OUTSTR("DONE"&'15&'12);
      END
   ELSE
      BEGIN
      GETPFL(FN1,PA0[0]);
      IF ¬SAME THEN
         BEGIN
         OUTSTR("FILE 2:");
         GETPFL(INCHWL,PB0[0])
         END
      ELSE COPPIC(PA0[0],PB0[0]);
      END;


   HAFPIC(PA0[0],PA1[0],10); HAFPIC(PB0[0],PB1[0],10);
   HAFPIC(PA1[0],PA2[0],10); HAFPIC(PB1[0],PB2[0],10);
   HAFPIC(PA2[0],PA3[0],10); HAFPIC(PB2[0],PB3[0],10);
   HAFPIC(PA3[0],PA4[0],10); HAFPIC(PB3[0],PB4[0],10);
   
   WID←PA0[LNBY]; HIG←PA0[PCLN];
   OUTSTR("WID "&CVS(WID)&" HIG "&CVS(HIG)&'15&'12);
   IF ¬SYNA THEN OUTSTR(CVOS(CHN←GDDCHN(-1))&" IS THE DD CHANNEL"&'15&'12);

   DDINIT; SCREEN(-1,-1,1,1);
   DRKEN; RECTAN(-1,-1,1,1); LITEN;
   FOR I←1 STEP 1 UNTIL (IF SYNA THEN PA0[BYBI] MIN 5 ELSE 1)DO
      BEGIN
      DRKEN; RECTAN(-1,-1,1,1);
      K←PA0[BYBI]-I;
      IF SYNA THEN VIDEO(-1,0,0,-1,PA0[0],2↑K) ELSE HAFTON(-1,0,0,-1,PA0[0]);
      IF SYNA THEN VIDEO(0,0,1,-1,PB0[0],2↑K) ELSE HAFTON(0,0,1,-1,PB0[0]);
      K←PA1[BYBI]-I;
      IF SYNA THEN VIDEO(-.75,.5,-.25,0,PA1[0],2↑K)
         ELSE HAFTON(-.75,.5,-.25,0,PA1[0]);
      IF SYNA THEN VIDEO(.25,.5,.75,0,PB1[0],2↑K)
         ELSE HAFTON(.25,.5,.75,0,PB1[0]);
      K←PA2[BYBI]-I;
      IF SYNA THEN VIDEO(-.625,.75,-.375,.5,PA2[0],2↑K)
         ELSE HAFTON(-.625,.75,-.375,.5,PA2[0]);
      IF SYNA THEN VIDEO(.375,.75,.625,.5,PB2[0],2↑K)
         ELSE HAFTON(.375,.75,.625,.5,PB2[0]);
      K←PA3[BYBI]-I;
      IF SYNA THEN VIDEO(-.5525,.75,-.4375,.875,PA3[0],2↑K)
         ELSE HAFTON(-.5525,.75,-.4375,.875,PA3[0]);
      IF SYNA THEN VIDEO(.4375,.75,.5525,.875,PB3[0],2↑K)
         ELSE HAFTON(.4375,.75,.5525,.875,PB3[0]);
      K←PA4[BYBI]-I;
      IF SYNA THEN VIDEO(-.52125,.875,-.46875,.9375,PA4[0],2↑K)
         ELSE HAFTON(-.52125,.875,-.46875,.9375,PA4[0]);
      IF SYNA THEN VIDEO(.46875,.875,.52125,.9375,PB4[0],2↑K)
         ELSE HAFTON(.46875,.875,.52125,.9375,PB4[0]);
      FOR J←1,2,3 DO DPYUP(IF SYNA THEN SYNMAP(5-I) ELSE CHN);
      IF ¬SYNA THEN SHOW(CHN) ELSE SHOW('47);
      END;

      BEGIN
      INTEGER ARRAY INTER[-2:(HIG-1)%W-1,0:(WID-1)%W-1];
      INTEGER ARRAY FEAT[1:2,1:2,1:100];
      INTEGER ARRAY DD1[0:IF SYNA THEN 0 ELSE DDSIZ-1];
      INTEGER NFEAT;
      NFEAT←0;

      IF SYNA THEN BEGIN DRKEN; RECTAN(-1,-1,1,1); LITEN; END;
      IF SYNA THEN FOR J←1,2,3 DO DPYUP(SYNMAP(5));
      IAV←INTRST(PA0[0],W,INTER[0,0]);
      IF ¬SYNA THEN DDSTOR(DD1[0]);
      FOR I←1 STEP 1 UNTIL (HIG-1)%W-2 DO
      FOR J←1 STEP 1 UNTIL (WID-1)%W-2 DO
      IF INTER[I,J]≥IAV ∧ (INTER[I,J] LAND 1)≠1 THEN
         BEGIN
         INTEGER IL,JL,IH,JH;
         NFEAT←NFEAT+1;
         IF SYNA THEN BEGIN DRKEN; RECTAN(-2,-2,2,2); LITEN; END
            ELSE DDLOAD(DD1[0]);
         FOR K←1 STEP 1 UNTIL NFEAT-1 DO
            BEGIN
            BOX(<FEAT[1,1,K]/WID-1>,<-FEAT[1,2,K]/HIG>,
                <(FEAT[1,1,K]+W)/WID-1>,<-(FEAT[1,2,K]+W)/HIG>);
            BOX(<FEAT[2,1,K]/WID>,<-FEAT[2,2,K]/HIG>,
                <(FEAT[2,1,K]+W)/WID>,<-(FEAT[2,2,K]+W)/HIG>);
            END;
         FEAT[1,1,NFEAT]←J*W;
         FEAT[1,2,NFEAT]←I*W;
         BOX(<(J+1)*W/WID-1>,<-(I+1)*W/HIG>,<J*W/WID-1>,<-I*W/HIG>);
         FOR K←1,2,3 DO DPYUP(IF SYNA THEN SYNMAP(5) ELSE CHN);
         IL←0; JL←0;
         IH←HIG%16-1; JH←WID%16-1;
         BOX1(<JL*16/WID>,<-IL*16/HIG>,<JH*16/WID>,<-IH*16/HIG>);
         BOX1(<((J+.5)*W-16*W/2)/WID-1>,<-((I+.5)*W-16*W/2)/HIG>,
             <((J+.5)*W+16*W/2)/WID-1>,<-((I+.5)*W+16*W/2)/HIG>);
         FOR K←1,2,3 DO DPYUP(IF SYNA THEN SYNMAP(5) ELSE CHN);
         BSTCOR(PA4[0],(J+.5)*W/16-W/2,(I+.5)*W/16-W/2,(J+.5)*W/16+W/2,(I+.5)*W/16+W/2,
                PB4[0],JL,IL,JH,IH);
         IL←IL*2; JL←JL*2; IH←IH*2; JH←JH*2;
         BOX1(<JL*8/WID>,<-IL*8/HIG>,<JH*8/WID>,<-IH*8/HIG>);
         BOX1(<((J+.5)*W-8*W/2)/WID-1>,<-((I+.5)*W-8*W/2)/HIG>,
             <((J+.5)*W+8*W/2)/WID-1>,<-((I+.5)*W+8*W/2)/HIG>);
         FOR K←1,2,3 DO DPYUP(IF SYNA THEN SYNMAP(5) ELSE CHN);
         BSTCOR(PA3[0],(J+.5)*W/8-W/2,(I+.5)*W/8-W/2,(J+.5)*W/8+W/2,(I+.5)*W/8+W/2,
                PB3[0],JL,IL,JH,IH);
         IL←IL*2; JL←JL*2; IH←IH*2; JH←JH*2;
         BOX1(<JL*4/WID>,<-IL*4/HIG>,<JH*4/WID>,<-IH*4/HIG>);
         BOX1(<((J+.5)*W-4*W/2)/WID-1>,<-((I+.5)*W-4*W/2)/HIG>,
             <((J+.5)*W+4*W/2)/WID-1>,<-((I+.5)*W+4*W/2)/HIG>);
         FOR K←1,2,3 DO DPYUP(IF SYNA THEN SYNMAP(5) ELSE CHN);
         BSTCOR(PA2[0],(J+.5)*W/4-W/2,(I+.5)*W/4-W/2,(J+.5)*W/4+W/2,(I+.5)*W/4+W/2,
                PB2[0],JL,IL,JH,IH);
         IL←IL*2; JL←JL*2; IH←IH*2; JH←JH*2;
         BOX1(<JL*2/WID>,<-IL*2/HIG>,<JH*2/WID>,<-IH*2/HIG>);
         BOX1(<((J+.5)*W-2*W/2)/WID-1>,<-((I+.5)*W-2*W/2)/HIG>,
             <((J+.5)*W+2*W/2)/WID-1>,<-((I+.5)*W+2*W/2)/HIG>);
         FOR K←1,2,3 DO DPYUP(IF SYNA THEN SYNMAP(5) ELSE CHN);
         BSTCOR(PA1[0],(J+.5)*W/2-W/2,(I+.5)*W/2-W/2,(J+.5)*W/2+W/2,(I+.5)*W/2+W/2,
                PB1[0],JL,IL,JH,IH);
         IL←IL*2; JL←JL*2; IH←IH*2; JH←JH*2;
         BOX1(<JL*1/WID>,<-IL*1/HIG>,<JH*1/WID>,<-IH*1/HIG>);
         BOX1(<((J+.5)*W-1*W/2)/WID-1>,<-((I+.5)*W-1*W/2)/HIG>,
             <((J+.5)*W+1*W/2)/WID-1>,<-((I+.5)*W+1*W/2)/HIG>);
         FOR K←1,2,3 DO DPYUP(IF SYNA THEN SYNMAP(5) ELSE CHN);
         BSTCOR(PA0[0],(J+.5)*W/1-W/2,(I+.5)*W/1-W/2,(J+.5)*W/1+W/2,(I+.5)*W/1+W/2,
                PB0[0],JL,IL,JH,IH);
         FEAT[2,1,NFEAT]←JL;
         FEAT[2,2,NFEAT]←IL;
         BOX(<JL/WID>,<-IL/HIG>,<JH/WID>,<-IH/HIG>);
         FOR K←1,2,3,4 DO DPYUP(IF SYNA THEN SYNMAP(5) ELSE CHN);
         IF LASTI≠"C" THEN LASTI←(INCHWL LAND '137);
         END;
      IF SYNA THEN BEGIN DRKEN; RECTAN(-2,-2,2,2); LITEN; END
         ELSE DDLOAD(DD1[0]);
      FOR K←1 STEP 1 UNTIL NFEAT DO
         BEGIN
         BOX(<FEAT[1,1,K]/WID-1>,<-FEAT[1,2,K]/HIG>,
             <(FEAT[1,1,K]+W)/WID-1>,<-(FEAT[1,2,K]+W)/HIG>);
         BOX(<FEAT[2,1,K]/WID>,<-FEAT[2,2,K]/HIG>,
             <(FEAT[2,1,K]+W)/WID>,<-(FEAT[2,2,K]+W)/HIG>);
         END;
      FOR K←1 STEP 1 UNTIL 4 DO DPYUP(IF SYNA THEN SYNMAP(5) ELSE CHN);
      INCHWL;
      IF ¬SYNA THEN RDDCHN(CHN);
      END;
   END;
END;